/*
* @Author: Choisaaaa
* @Date: 2018/5/6  0:13
* ES6:面向对象
* 类的定义关键字：class
*/

//----------------1.类的定义------------------
class Animal{
    constructor(name){//构造函数
        this.name = name;
    }
    getName(){
        return this.name
    }
}

let animal = new Animal('animal test');//类的实例
console.log(animal.getName())//通过实例调用类的方法

// --------------2.类的继承------------------------
class Animal{
    constructor(){
        this.name = 'animal';
    }
    getName(){
        return this.name
    }
}

class Cat extends Animal{
    constructor(){
        super()
        this.name = 'cat';//使用this 需要实现super方法
    }
}

let animal  = new Animal();
let cat     = new Cat();
console.log(animal.getName())
console.log(cat.getName())


// ----------------------3.对象的用法
//ES5的语法
var name  = 'Mark',
    age  = 18;

var obj = {
    name: name,
    age: age,
    getName: function(){
        return this.name;
    },
    getAge: function(){
        return this.age;
    }
}
//ES6语法
let name = 'Mark',
    age  = 18;

let obj = {
    // 变量名可以直接用作对象的属性名称
    name,
    age,
    // 对象里的方法可以简写
    getName(){
        return this.name;
    },
    // 表达式作为属性名或方法名
    ['get' + 'Age'](){
        return this.age;
    }
}


// Object对象的扩展
Object.keys(obj);


